如何利用Controller傳遞資料
Controller傳遞資料給View的四種途徑
在MVC 架構之下Model、View、Controller分別為獨立的個體,因此若Controller若要把資料傳送給View需要透過MVC內建的傳遞機制來進行傳送,例如:ViewData、ViewBag、Model、TempData。
那接下來就來分別介紹這四種傳遞方式的特性及限制吧~
補充說明📄
1.ViewData、ViewBag、Model表面上是三個不同個體,但實際上都是儲存在ViewData這個實例中。
2.ViewData、ViewBag、Model的資料僅存在當前的Request中,一旦轉向資料就會清空。
3.ViewDataDictionary和ITempDataDictionary都繼承了相同介面,但唯一的不同就是ITempDataDictionary的資料儲存在Cookie或Session中,轉向後資料不會遺失。
以ViewData傳遞資料
是Key與Value成對的Dictionary,資料可為任何類型。
補充說明📄
1.因ViewDataDictionary繼承IDictionary<string,object>緣故,資料可以用object的型別加入ViewDataDictionary中,故ViewData可儲存任意型別之資料。
2.資料使用需做轉型(Stirng型別除外)
3.網頁轉向,ViewData資料會被清空
以ViewBag傳遞資料
ViewBag是dynamic型別的Property,可動態新增無限多個屬性,指派之Value可為任何型別。
補充說明📄
ViewBag與ViewData可合併使用,但Key與屬性名字需錯開
ViewBag資料不需轉型
ViewBag能動態加入屬性,是因為它是DynamicViewData型別物件,繼承DynamicObject類別,並實作TryGetMember和TrySetMember方法,故能動態設定讀取屬性。\
以Model傳遞資料
若要指定Model物件時有兩種方法
1.呼叫View()方法時直接將Model當作參數傳入
2.將model物件指定給ViewData.Model屬性
以TempData傳遞資料
在不同Actions間傳遞資料須以TempData傳送。
補充說明📄
1.跨Actions傳送實際上就是網頁轉向,可以用TempData傳送是因為其儲存在Cookie或Session中。
2.使用時須做轉型別(String除外)
3.TempData資料可做防呆檢查,非強制性。
那麼以上就是今天的分享啦~
明天見啦~See YA(。•̀ᴗ-)